package com.hotel.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hotel.entity.Room;
import com.hotel.dto.RoomDTO;
import com.hotel.vo.RoomVO;

import java.util.List;
import java.util.Map;

/**
 * 房间服务接口
 */
public interface RoomService extends IService<Room> {
    
    /**
     * 分页查询房间列表
     */
    Page<RoomVO> getRoomPage(int current, int size, String keyword, String status, Integer floor);
    
    /**
     * 根据ID获取房间详情
     */
    RoomVO getRoomById(Long id);
    
    /**
     * 创建房间
     */
    boolean createRoom(RoomDTO roomDTO);
    
    /**
     * 更新房间信息
     */
    boolean updateRoom(Long id, RoomDTO roomDTO);
    
    /**
     * 删除房间
     */
    boolean deleteRoom(Long id);
    
    /**
     * 根据房间号查询房间
     */
    Room getRoomByNumber(String roomNumber);
    
    /**
     * 更新房间状态
     */
    boolean updateRoomStatus(Long roomId, String status);
    
    /**
     * 批量更新房间状态
     */
    boolean batchUpdateRoomStatus(List<Long> roomIds, String status);
    
    /**
     * 获取可用房间列表
     */
    List<RoomVO> getAvailableRooms(Long roomTypeId, String checkinDate, String checkoutDate);
    
    /**
     * 获取房间状态统计
     */
    Map<String, Object> getRoomStatusStats();
    
    /**
     * 获取楼层房间分布
     */
    List<Map<String, Object>> getFloorRoomDistribution();
    
    /**
     * 标记房间清洁完成
     */
    boolean markRoomCleaned(Long roomId);
    
    /**
     * 标记房间维护完成
     */
    boolean markRoomMaintained(Long roomId);
    
    /**
     * 获取房间入住历史
     */
    List<Map<String, Object>> getRoomCheckinHistory(Long roomId, int limit);
    
    /**
     * 检查房间是否可用
     */
    boolean isRoomAvailable(Long roomId, String checkinDate, String checkoutDate);
}